package com.scuec.tourismwebsite.service;
import com.scuec.tourismwebsite.entity.BoutiqueTour;
import com.scuec.tourismwebsite.mapper.BoutiqueTourMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service;
import com.github.pagehelper.PageHelper;

import javax.transaction.Transactional;
import java.util.List;
import java.util.Optional;

@Service
public class BoutiqueTourServiceImpl implements BoutiqueTourService {

    @Autowired
    private BoutiqueTourMapper boutiqueTourMapper;

    @Override
    public List<BoutiqueTour> findAll() {
        return boutiqueTourMapper.findAll();
    }

    @Override
    public Page<BoutiqueTour> findAll(Pageable pageable) {
        PageHelper.startPage(pageable.getPageNumber() + 1, pageable.getPageSize());
        List<BoutiqueTour> list = boutiqueTourMapper.findAll();
        com.github.pagehelper.PageInfo<BoutiqueTour> pageInfo = new com.github.pagehelper.PageInfo<>(list);
        return new PageImpl<>(list, pageable, pageInfo.getTotal());
    }

    @Override
    public Optional<BoutiqueTour> findById(Integer boutique_id) {
        BoutiqueTour tour = boutiqueTourMapper.findById(boutique_id);
        return Optional.ofNullable(tour);
    }

    @Override
    public BoutiqueTour add(BoutiqueTour boutiqueTour) {
        boutiqueTourMapper.insert(boutiqueTour);
        return boutiqueTour;
    }

    @Override
    public BoutiqueTour update(Integer boutique_id, BoutiqueTour boutiqueTour) {
        boutiqueTourMapper.update(boutiqueTour);
        return boutiqueTour;
    }

    @Override
    public void delete(Integer boutique_id) {
        boutiqueTourMapper.delete(boutique_id);
    }

    @Override
    public Page<BoutiqueTour> searchByTourName(String tourName, Pageable pageable) {
        PageHelper.startPage(pageable.getPageNumber() + 1, pageable.getPageSize());
        List<BoutiqueTour> list = boutiqueTourMapper.searchByTourName(tourName);
        com.github.pagehelper.PageInfo<BoutiqueTour> pageInfo = new com.github.pagehelper.PageInfo<>(list);
        return new PageImpl<>(list, pageable, pageInfo.getTotal());
    }

    @Override
    public boolean updatePhoto(Integer boutique_id, String image_url) {
        int affectedRows = boutiqueTourMapper.updatePhoto(image_url, boutique_id);
        return affectedRows > 0;
    }

    @Override
    @Transactional  // 确保方法是事务性的
    public int decreaseAvailability(Integer boutique_id) {
        return boutiqueTourMapper.decreaseAvailability(boutique_id);
    }
}